package br.com.dallasmotopecas.seguranca.usuario.managerbean;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import br.com.dallasmotopecas.seguranca.usuario.controller.UsuarioController;
import br.com.dallasmotopecas.seguranca.usuario.vo.UsuarioVo;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.exception.UsuarioAtivoException;
import br.com.dallasmotopecas.util.exception.UsuarioLogadoException;
import br.com.dallasmotopecas.util.exception.UsuarioPerfilException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="loginManagerBean")
@RequestScoped
public class LoginManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private UsuarioVo usuarioLogarVo;
	
	public LoginManagerBean()
	{
		
	}
	
	@PostConstruct
	public void inicializar()
	{
		removerSessaoUsuario();
	}
	
	@PreDestroy
	public void destroy()
	{
		setUsuarioLogarVo(null);
	}

	public UsuarioVo getUsuarioLogarVo()
	{
		if (usuarioLogarVo == null) usuarioLogarVo = new UsuarioVo();
		
		return usuarioLogarVo;
	}

	public void setUsuarioLogarVo(UsuarioVo usuarioLogarVo)
	{
		this.usuarioLogarVo = usuarioLogarVo;
	}

	public void loginUsuario()
	{
		UsuarioController usuarioController = null;
		
		try
		{
			usuarioController = new UsuarioController(getContexto());
			usuarioController.logarSistema(getUsuarioLogarVo());
			processaSessaoUsuario(getUsuarioLogarVo());
			redirecionarPagina("/view/Principal.jsf");
		}
		catch(ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (UsuarioLogadoException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (UsuarioAtivoException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (UsuarioPerfilException e)
		{
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (usuarioController != null)
			{
				usuarioController.close();
				usuarioController = null;
			}
		}
	}
}
